# -*- coding: utf-8 -*-
import numpy as np
import cv2
from matplotlib import pyplot as plt

#直方图
# cv2.calcHist(img,channels,mask,histSize,rangs)
# img:原图像格式为unit8或float32,当传入函数时，用[图像]括起来，例如[img]
# channels:同样用[],告诉函数统计图像的直方图，如果图象是灰度图，它的值就是[0],如果是彩色图传入的人参数[0][1][2],，分别对应BGR通道
# mask：掩模图像，统计整幅图的直方图就设置为None,如果你想使用图像某一部分的直方图就制作一个掩模图像并使用
# histSize：同样用[]，表示BIN的数目
# rangs：像素范围[0,256]

def cv_show(img,name):#,writename
    cv2.imshow(name,img)
    # cv2.imwrite(writename,img)
    cv2.waitKey()
    cv2.destroyAllWindows()
# 1.打开一张图片的直方图
#读取原始图像的灰度图
# img = cv2.imread('cat.jpg',0)
# hist = cv2.calcHist([img],[0],None,[256],[0,256])
# print(hist.shape)
# plt.hist(img.ravel(),256)
# plt.show()

# #2.一张图片的三个通道直方图统计
# img = cv2.imread('cat.jpg')
# color = ('b','g','r')
# for i,col in enumerate(color):
#     histr = cv2.calcHist([img],[i],None,[256],[0,256])
#     plt.plot(histr,color = col)
#     plt.xlim([0,256])
# plt.savefig('01bgr.png')
# plt.show()

#3.mask掩模图像操作
#创建mask掩模图像
img = cv2.imread('cat.jpg')
mask = np.zeros(img.shape[:2],np.uint8)
#取中间位置100-300，100-400的方框为白色
mask[100:300,100:400] = 255
# 原图和掩码做与操作
mask_img = cv2.bitwise_and(img,img,mask=mask) #与操作

hist_full  = cv2.calcHist([img],[0],None,[256],[0,256])
hist_mask  = cv2.calcHist([img],[0],mask,[256],[0,256])
#原图
plt.subplot(221), plt.imshow(img, cmap='gray')
plt.title('img')
#掩模图像
plt.subplot(222), plt.imshow(mask, cmap='gray')
plt.title('mask')
#原图和掩模想与
plt.subplot(223), plt.imshow(mask_img, cmap='gray')
plt.title('mask_img')
#统计直方图
#图四为做了掩码操作和没做该操作的对比图
plt.subplot(224),plt.plot(hist_full),plt.plot(hist_mask)
plt.title('hist')
plt.xlim([0,256])
plt.savefig('01_2')
plt.show()








